package com.faxe.letsgroup.ws.to;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;

@MappedSuperclass
public abstract class BaseTO implements Serializable {

	private static final long serialVersionUID = 3256446889040622647L;
	public static final String STATUS_PENDENTE = "PENDENTE";

	public static final String STATUS_APROVADO = "APROVADO";

	public static final String STATUS_PRE_CADASTRO = "PRE-CADASTRO";

	@Column(name = "datacriacao")
	protected Date dataCriacao;

	@Column(name = "dataalteracao")
	protected Date dataAlteracao;

	@Column(name = "dataremocao")
	protected Date dataRemocao;

	@Column(name = "observacao", columnDefinition = "text")
	protected String observacao;

	@Column(name = "status")
	private String status;

	@Column(name = "ativo")
	protected Boolean ativo;

	@Column(name = "removido")
	protected Boolean removido;
	@Transient
	protected Long ultimaAlteracaoLong;

	public BaseTO() {
		this.removido = false;
	}

	public abstract String getAbreviation();

	

	public HashMap<String, String> getHistoricoExclusion() {
		HashMap<String, String> he = new HashMap<String, String>();
		he.put("Abreviation", "true");
		he.put("DataAlteracao", "true");
		he.put("DataCriacao", "true");
		he.put("DataPrimeiroAcesso", "true");
		he.put("DataUltimoAcesso", "true");
		he.put("DataRemocao", "true");
		return he;
	}

	public Date getDataAlteracao() {
		return dataAlteracao;
	}

	public void setDataAlteracao(Date dataAlteracao) {
		this.dataAlteracao = dataAlteracao;
	}

	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public Date getDataRemocao() {
		return dataRemocao;
	}

	public void setDataRemocao(Date dataRemocao) {
		this.dataRemocao = dataRemocao;
	}

	public Boolean getRemovido() {
		return removido;
	}

	public void setRemovido(Boolean removido) {
		this.removido = removido;
	}

	public Boolean getAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public String getStatus() {
		return this.status;// Enum.valueOf(Status.class, status);
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public Long getId() {
		return null;
	}

//	public Object getAtributo(String nome) {
//		nome = StringUtils.capitalize(nome);
//		Object valor = null;
//		try {
//			Method method = this.getClass().getMethod("get" + nome, null);
//			valor = method.invoke(this, null);
//		} catch (NoSuchMethodException e) {
//		} catch (IllegalAccessException e) {
//		} catch (InvocationTargetException e) {
//		}
//		return valor;
//	}
//
//	public void setAtributo(String nome, String valor) {
//		nome = StringUtils.capitalize(nome);
//		try {
//			Method method = this.getClass().getMethod("set" + nome,
//					String.class);
//			method.invoke(this, valor);
//		} catch (NoSuchMethodException e) {
//			e.printStackTrace();
//		} catch (IllegalAccessException e) {
//			e.printStackTrace();
//		} catch (InvocationTargetException e) {
//			e.printStackTrace();
//		}
//	}
}